import json
import os

# 基于笔记.md的自定义科目分类映射
CATEGORY_MAPPING = {
    # 流动资产
    "现金类": {
        "items": ["货币资金", "结算备付金", "拆出资金", "交易性金融资产", "衍生金融资产"],
        "description": "即时支付能力",
        "type": "流动资产",
        "display_order": 1
    },
    "应收款类": {
        "items": ["应收票据", "应收账款", "应收款项融资", "应收票据及应收账款"],
        "description": "经营质量",
        "type": "流动资产",
        "display_order": 2
    },
    "预付款类": {
        "items": ["预付款项"],
        "description": "供应链地位",
        "type": "流动资产",
        "display_order": 3
    },
    "存货类": {
        "items": ["存货"],
        "description": "周转效率",
        "type": "流动资产",
        "display_order": 4
    },
    "其他流动类": {
        "items": ["应收保费", "应收分保款项", "应收分保合同准备金", "其他应收款", "其他应收款(合计)", 
                "买入返售金融资产", "应收利息", "应收股利", "应收出口退税", "应收补贴款", "应收保证金", "内部应收款",
                "其他流动资产", "合同资产", "持有待售资产", "划分为持有待售的资产", "待摊费用", "待处理流动资产损益",
                "一年内到期的非流动资产"],
        "description": "异常项目",
        "type": "流动资产",
        "display_order": 5
    },
    
    # 非流动资产
    "长期投资类": {
        "items": ["债权投资", "其他债权投资", "长期应收款", "长期股权投资", "其他权益工具投资", "其他非流动金融资产", 
                "可供出售金融资产", "持有至到期投资", "投资-贷款及应收款项", "定期存款", "特准储备物资", "特准储备物资(贷方)"],
        "description": "投资收益",
        "type": "非流动资产",
        "display_order": 6
    },
    "固定资产类": {
        "items": ["投资性房地产", "固定资产", "固定资产(合计)", "在建工程", "工程物资", "固定资产清理", "生产性生物资产", "油气资产", "使用权资产", 
                "融资租赁资产", "融资租入固定资产", "经营租入固定资产改良", "经营租赁资产"],
        "description": "生产能力",
        "type": "非流动资产",
        "display_order": 7
    },
    "无形资产类": {
        "items": ["无形资产", "商誉", "长期待摊费用", "研发支出"],
        "description": "技术实力",
        "type": "非流动资产",
        "display_order": 8
    },
    "其他固定类": {
        "items": ["发放贷款和垫资", "债权投资", "其他债权投资", "长期应收款", "投资性房地产", "生产性生物资产", "油气资产", "使用权资产", "开发支出", "递延所得税资产", "其他非流动资产", "递延税款借项"],
        "description": "特殊资产",
        "type": "非流动资产",
        "display_order": 9
    },
    
    # 负债类
    "短期借款类": {
        "items": ["短期借款", "交易性金融负债", "衍生金融负债", "向中央银行借款", "拆入资金", "一年内到期的非流动负债"],
        "description": "短期偿债",
        "type": "负债类",
        "display_order": 10
    },
    "应付款类": {
        "items": ["应付票据", "应付账款", "应付票据及应付账款", "其他应付款", "其他应付款(合计)", "应付利息", "应付股利"],
        "description": "供应链话语权",
        "type": "负债类",
        "display_order": 11
    },
    "预收项类": {
        "items": ["预收款项", "合同负债"],
        "description": "市场竞争力",
        "type": "负债类",
        "display_order": 12
    },
    "薪酬&税类": {
        "items": ["应付职工薪酬", "应交税费", "应付税金", "预提费用", "预提工资", "应付工资", "应付福利费"],
        "description": "经营健康度",
        "type": "负债类",
        "display_order": 13
    },
    "其他负债类": {
        "items": ["卖出回购金融资产款", "吸收存款及同业存放", "代理买卖证券款", "代理承销证券款", "应付手续费及佣金", "应付分保账款", "持有待售负债", "划分为持有待售的负债", "其他流动负债", "应付短期债券"],
        "description": "潜在风险",
        "type": "负债类",
        "display_order": 14
    },
    
    # 非流动负债
    "长期借款类": {
        "items": ["长期借款", "应付债券"],
        "description": "资本结构",
        "type": "非流动负债",
        "display_order": 15
    },
    "其他非流动债类": {
        "items": ["保险合同准备金", "租赁负债", "长期应付款", "专项应付款", "长期应付职工薪酬", "应付融资租赁款", "预计负债", "递延收益", "递延所得税负债", "递延税款贷项", "其他非流动负债", "特准储备基金"],
        "description": "特殊义务",
        "type": "非流动负债",
        "display_order": 16
    },
    
    # 所有者权益类
    "实收资本类": {
        "items": ["实收资本", "股本", "其他权益工具", "资本公积"],
        "description": "资本投入",
        "type": "所有者权益类",
        "display_order": 17
    },
    "留存收益类": {
        "items": ["盈余公积", "未分配利润", "一般风险准备", "未确认的投资损失"],
        "description": "经营积累",
        "type": "所有者权益类",
        "display_order": 18
    },
    "其他权益类": {
        "items": ["库存股", "其他综合收益", "专项储备", "外币报表折算差额", "少数股东权益"],
        "description": "其他权益",
        "type": "所有者权益类",
        "display_order": 19
    }
}

def save_mapping_to_json(output_path="category_mapping.json"):
    """
    将科目映射关系保存为JSON文件
    
    参数:
        output_path (str): 输出文件路径
    """
    with open(output_path, 'w', encoding='utf-8') as f:
        json.dump(CATEGORY_MAPPING, f, ensure_ascii=False, indent=4)
    print(f"科目映射关系已保存到: {output_path}")

def load_mapping_from_json(file_path):
    """
    从JSON文件加载科目映射关系
    
    参数:
        file_path (str): JSON文件路径
        
    返回:
        dict: 科目映射关系
    """
    if not os.path.exists(file_path):
        print(f"映射文件不存在: {file_path}，将使用默认映射")
        return CATEGORY_MAPPING
    
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            return json.load(f)
    except Exception as e:
        print(f"加载映射文件失败: {e}，将使用默认映射")
        return CATEGORY_MAPPING

def get_simple_mapping():
    """
    获取简化版的科目映射关系（仅包含科目列表）
    
    返回:
        dict: 简化版科目映射关系
    """
    simple_mapping = {}
    for category, info in CATEGORY_MAPPING.items():
        simple_mapping[category] = info["items"]
    return simple_mapping

def get_ordered_categories():
    """
    获取按显示顺序排序的分类列表
    
    返回:
        list: 排序后的分类列表
    """
    categories = list(CATEGORY_MAPPING.keys())
    return sorted(categories, key=lambda x: CATEGORY_MAPPING[x]["display_order"])

# 测试代码
if __name__ == "__main__":
    # 保存映射到JSON文件
    save_mapping_to_json("../config/category_mapping.json")
    
    # 获取排序后的分类列表
    ordered_categories = get_ordered_categories()
    print("按显示顺序排序的分类列表:")
    for category in ordered_categories:
        print(f"{category} ({CATEGORY_MAPPING[category]['description']})")